/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Beans;

import Modelo.ControladorBD;
import Modelo.UsuarioPersona;
import Utils.Constantes;
import Utils.Mensajes;
import Utils.encriptaCadenas;
import java.io.IOException;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;


public class BeanUsuarioPersona {
    private UsuarioPersona objUsuario=new UsuarioPersona();
    private boolean usuarioLogeado;
    private boolean flgPassIguales;
    private String usuario;
    private String clave;

    public UsuarioPersona getObjUsuario() {
        return objUsuario;
    }

    public void setObjUsuario(UsuarioPersona objUsuario) {
        this.objUsuario = objUsuario;
    }

    public boolean isUsuarioLogeado() {
        return usuarioLogeado;
    }

    public void setUsuarioLogeado(boolean usuarioLogeado) {
        this.usuarioLogeado = usuarioLogeado;
    }

    public boolean isFlgPassIguales() {
        return flgPassIguales;
    }

    public void setFlgPassIguales(boolean flgPassIguales) {
        this.flgPassIguales = flgPassIguales;
    }

    public String getUsuario() {
        return usuario;
    }

    public void setUsuario(String usuario) {
        this.usuario = usuario;
    }

    public String getClave() {
        return clave;
    }

    public void setClave(String clave) {
        this.clave = clave;
    }
    
    /**
     * logueo de usuario
     */
    
    public String loginUsuario(){
        String outcome = null;       
        flgPassIguales=false;
        try{            
        FacesContext contex = FacesContext.getCurrentInstance();                                        
            if(objUsuario!=null){
                objUsuario=this.validarUsuario(this.usuario, encriptaCadenas.getStringMessageDigest(this.clave,encriptaCadenas.MD5));                
                if(objUsuario != null){          //  
                    Mensajes.addMensajeInfo("Usuario logeado correctamente");
                    usuarioLogeado = true; 
                    contex.getExternalContext().getSessionMap().put("usuario",objUsuario);                       
                    contex.getExternalContext().getSessionMap().put("isSesionAlive", usuarioLogeado);                                                                                         
                    outcome=Constantes.PAGE_INGRESO_JSF;                    
               }
               else{
                   Mensajes.addMensajeError("Usuario o Password Incorrectos");                   
                   objUsuario= new UsuarioPersona();
                   this.usuario= "";
                   this.clave="";
                   outcome=Constantes.PAGE_LOGIN_JSF;
               }  
            }
            else{
                Mensajes.addMensajeError("Usuario o Password Incorrectos");
                objUsuario= new UsuarioPersona();
                this.usuario= "";
                this.clave="";                   
                outcome=Constantes.PAGE_LOGIN_JSF;
                
            }
                
        }
        catch(Exception e){
            e.printStackTrace();
            System.out.println(e.getMessage());
        }        
    return outcome+"?faces-redirect=true";         
    }
    /**
     * validacion de usuario
     */
    public  UsuarioPersona validarUsuario(String us, String pass){
     ResultSet rs=null; 
     Connection conexion = null;
     UsuarioPersona user=null;  
     FacesContext contex = FacesContext.getCurrentInstance();
        try{               
           conexion = ControladorBD.darConexionBD();
            CallableStatement st = conexion.prepareCall
            ( "{call sp_validarUsuario(?,?)}");
            st.setString(1,us);                   
            st.setString(2,pass);             
            rs = st.executeQuery();
            if(rs.next()){
                user = new UsuarioPersona();
                user.setCodigoUsuario(rs.getString("codigoUsuario"));
                user.setClaveUsuario(rs.getString("claveUsuario"));
                user.setNivelUsuario(rs.getInt("nivelUsuario"));
                user.setNivelPersona(rs.getString("nivelPersona"));
                user.setCodPersonaAux(rs.getString("codigoPersona"));
                rs.close();                
                conexion.close();                
            }
            if(us!=null){
                contex.getExternalContext().getSessionMap().put("nivelUsuario",user.getNivelUsuario());
                contex.getExternalContext().getSessionMap().put("nivelPersona",user.getNivelPersona());
                contex.getExternalContext().getSessionMap().put("codigoPersona",user.getCodPersonaAux());
            }
       
        }catch(Exception error){
            System.out.println("Error en el metodo por: " + error.getMessage());
                error.printStackTrace();
        }
        return user;
 }
    
    /**
     * salir del sistema
     */
    public void salirSistema(){
        FacesContext contex = FacesContext.getCurrentInstance();  
        this.usuario="";
        this.clave="";
        String outcome =Constantes.PAGE_LOGIN_JSF;
        contex.getExternalContext().getSessionMap().clear();
        contex.getExternalContext().getSessionMap().put("isSesionAlive", false);
        contex.getExternalContext().invalidateSession();
        try {
            contex.getExternalContext().redirect(outcome);
        } catch (IOException ex) {
            System.out.println("Error en el metodo por: " + ex.getMessage());
                ex.printStackTrace();
        }

    }
    /**
     * validar session
     */
    public void validarSesion() {        
        FacesContext contex = FacesContext.getCurrentInstance();
        try {
            if (contex.getExternalContext().getSessionMap().get("isSesionAlive") == null
                    || contex.getExternalContext().getSessionMap().get("isSesionAlive").
                    toString().trim().equals("false")) {
                contex.getExternalContext().redirect(Constantes.PAGE_LOGIN_JSF);
                contex.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN,
                        "Autenticacion", "El usuario No existe !!"));

            }
        } catch (Exception e) {
            try {
                FacesContext.getCurrentInstance().getExternalContext().redirect(Constantes.PAGE_LOGIN_JSF);
            } catch (Exception ex) {
                
            }
        }
        
    }
    
}
